package org.example.system.service;

import io.minio.errors.MinioException;
import org.example.system.model.dto.FileInfo;
import org.example.system.model.dto.TreeFileList;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;

/**
 * 文件上传服务
 *
 * @author LY
 */
public interface OssService {
    /**
     * 上传文件
     *
     * @param file 表单文件对象
     * @return 文件信息
     */
    FileInfo uploadFile(MultipartFile file);

    /**
     * 上传头像
     *
     * @param file 表单文件对象
     * @return 文件信息
     */
    FileInfo uploadAvatar(MultipartFile file);

    /**
     * 下载文件
     *
     * @param fileName 文件名
     */
    ResponseEntity<InputStreamResource> downLoadFile(String fileName);

    /**
     * 查看文件列表
     *
     * @return 文件集合
     */
    List<TreeFileList> getFileList() throws NoSuchAlgorithmException, IOException, InvalidKeyException, MinioException;

    /**
     * 删除单个文件
     *
     * @param fileName 文件名
     */
    void deleteFile(String fileName) throws IOException, NoSuchAlgorithmException, InvalidKeyException;

    /**
     * 批量删除文件
     *
     * @param fileNameList 文件名集合
     */
    void deleteFileBatch(List<String> fileNameList) throws IOException, NoSuchAlgorithmException, InvalidKeyException;

    /**
     * 批量文件上传
     *
     * @param files 文件列表
     * @return 上传后的文件信息集合
     */
    List<FileInfo> uploadFiles(List<MultipartFile> files);

    /**
     * 文件批量下载
     *
     * @param fileNameList 文件名列表
     * @return zip 文件
     */
    ResponseEntity<byte[]> downLoadFileZip(List<String> fileNameList);
}
